package cn.kgc.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import static cn.kgc.base.SystemConstant.*;

/**
 * @author wangyue
 * @version 1.0
 * 从请求头中获得登录的用户的ID和登录的类型,将这些登录的用户信息保存到当前线程中。
 */
@Component
public class JwtInterceptor implements HandlerInterceptor {
    //存储的是当前登录的求职者和招聘者的用户信息
    public static  ThreadLocal<String>  userIds =new ThreadLocal<>();
    //存储的是当前登录的管理员信息
    public static  ThreadLocal<String>  adminUserIds=new ThreadLocal<>();
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //请求头中获得当前用户登录的类型
        String loginType= request.getHeader(HEADER_LOGIN_TYPE);
        //请求头中获得当前用户登录的ID
        String userId = request.getHeader(HEADER_USER_ID);
        //如果登录的类型是普通用户或者是招聘者使用APP端登录（使用手机号和验证码进行一键注册登录）招聘者使用APP扫码登录企业招聘管理后台
        if(LOGIN_TYPE_APP.equals(loginType) || LOGIN_TYPE_SAAS.equals(loginType)){
            userIds.set(userId);
        }else if(LOGIN_TYPE_ADMIN.equals(loginType)){
            //如果是招聘平台后端管理人员
            adminUserIds.set(userId);
        }
        return true;
    }

    /**
     * 控制器方法执行完成以后在执行
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //清除当前线程中的用户信息
        userIds.remove();
        adminUserIds.remove();
    }
}
